'''
这段代码的作用是初始化一个数据库服务。
它使用 retry 函数来尝试建立与数据库的连接，直到成功为止。
如果在尝试建立连接时遇到错误，retry 函数会自动尝试重新建立连接，直到达到最大尝试次数或成功建立连接。

在成功建立连接后，程序会输出一条消息，表示服务已经完成初始化。
'''
import logging

from sqlalchemy import text
from tenacity import after_log, before_log, retry, stop_after_attempt, wait_fixed

from app.db.session import SessionLocal

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

max_tries = 60 * 5  # 5 minutes
wait_seconds = 1


@retry(
    stop=stop_after_attempt(max_tries),
    wait=wait_fixed(wait_seconds),
    before=before_log(logger, logging.INFO),
    after=after_log(logger, logging.WARN),
)
def init() -> None:
    try:
        db = SessionLocal()
        # Try to create session to check if DB is awake
        db.execute(text("SELECT 1"))
    except Exception as e:
        logger.error(e)
        raise e


def main() -> None:
    logger.info("初始化服务")
    init()
    logger.info("服务已完成初始化")


if __name__ == "__main__":
    main()
